package com.bpmn.common.enums;

import com.bpmn.common.exception.ServiceException;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;

/**
 * @author rain
 */

@Getter
@AllArgsConstructor
public enum TaskOperationEnum {

    AGREE("agree", "同意"),
    // 只是在变量里加一个拒绝的条件，用户可以根据变量控制流程走向
    REJECT("reject", "拒绝"),
    // 跟前加签意思一样，不同点为可以是多个
    DELEGATE("delegate", "委派"),
    TRANSFER("transfer", "转办"),
    // 终止流程，终止该次申请
    TERMINATE("terminate", "终止"),
    // 可以指定一个历史节点退回
    RETURN("return", "退回"),
    // 直接退回到发起人
    RETURN_TO_START("returnToStart", "退回到发起人"),
    // 驳回该流程，直接结束流程
    REJECT_BACK("rejectBack", "驳回"),
    REVOKE("revoke", "撤销"),
    // 默认为向后加签，被加签人办理完之后，自动完成加签任务
    ADD_SIGN("addSign", "加签"),
    MULTI_AGREE("multi_agree", "同意（会签）"),
    MULTI_REFUSE("multi_refuse", "拒绝（会签）"),
    MULTI_ABSTAIN("multi_abstain", "弃权（会签）");

    private final String code;
    private final String desc;

    public static TaskOperationEnum getByCode(String code) {
        return Arrays.stream(values())
                .filter(op -> op.getCode().equals(code))
                .findFirst()
                .orElseThrow(() -> new ServiceException("不支持的任务操作"));
    }
} 